/**
 * 
 */
package fr.gfi.agraf.service.mapper;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.springframework.util.CollectionUtils;

import fr.gfi.agraf.persistence.entity.Profil;
import fr.gfi.agraf.persistence.entity.Utilisateur;
import fr.gfi.agraf.vue.bean.ProfilDTO;
import fr.gfi.agraf.vue.bean.UtilisateurDTO;

/**
 * @author Zakaria
 * 
 */
public class UtilisateurMapper {

	/**
	 * private Constructor
	 */
	private UtilisateurMapper() {
		// Empty
	}

	/**
	 * Convertit une entity en DTO
	 * 
	 * @param utilisateur
	 * @return utilisateurDTO
	 */
	public static UtilisateurDTO entityToDTO(final Utilisateur utilisateur) {
		final UtilisateurDTO utilisateurDTO = new UtilisateurDTO();
		utilisateurDTO.setId(utilisateur.getId());
		utilisateurDTO.setNom(utilisateur.getNom());
		utilisateurDTO.setPrenom(utilisateur.getPrenom());
		utilisateurDTO.setDateEntree(utilisateur.getDateEntree());
		utilisateurDTO.setDateSortie(utilisateur.getDateSortie());
		utilisateurDTO.setEmail(utilisateur.getEmail());
		utilisateurDTO.setIdentifiant(utilisateur.getIdentifiant());
		utilisateurDTO.setMotDePasse(utilisateurDTO.getMotDePasse());
		final List<ProfilDTO> listeProfil = new ArrayList<ProfilDTO>();
		for (final Profil profil : utilisateur.getProfils()) {
			listeProfil.add(ProfilMapper.entityToDTO(profil));
		}
		// Je tri la liste car provient d'un set
		Collections.sort(listeProfil, new Comparator<ProfilDTO>() {
			public int compare(final ProfilDTO p0, final ProfilDTO p1) {
				return p0.getLibelle().compareTo(p1.getLibelle());
			}
		});
		utilisateurDTO.setListeProfilDTO(listeProfil);
		return utilisateurDTO;
	}

	/**
	 * Convertit un DTO en entity
	 * 
	 * @param utilisateurDTO
	 * @return
	 */
	public static Utilisateur dtoToEntity(final UtilisateurDTO utilisateurDTO) {
		final Utilisateur utilisateur = new Utilisateur();
		utilisateur.setNom(utilisateurDTO.getNom());
		utilisateur.setPrenom(utilisateurDTO.getPrenom());
		utilisateur.setDateEntree(utilisateurDTO.getDateEntree());
		utilisateur.setDateSortie(utilisateurDTO.getDateSortie());
		utilisateur.setEmail(utilisateurDTO.getEmail());
		utilisateur.setIdentifiant(utilisateurDTO.getIdentifiant());
		utilisateur.setMotDePasse(utilisateurDTO.getMotDePasse());
		// TODO : faire appel au mapper profil
		return utilisateur;
	}

	/**
	 * Convertit list d'entity en list DTO
	 * 
	 * @param utilisateurList
	 * @return
	 */
	public static List<UtilisateurDTO> entityToDTO(final List<Utilisateur> utilisateurList) {
		final List<UtilisateurDTO> utilisateurDTOList = new ArrayList<UtilisateurDTO>();
		if (!CollectionUtils.isEmpty(utilisateurList)) {
			for (final Utilisateur utilisateur : utilisateurList) {
				utilisateurDTOList.add(entityToDTO(utilisateur));
			}
		}
		return utilisateurDTOList;
	}

	/**
	 * renvoie la concaténation du prénom et du nom
	 */
	public static String getConcatenationPrenomNom(final Utilisateur utilisateur) {
		return utilisateur.getPrenom() + " " + utilisateur.getNom();
	}
}
